#!/bin/bash
# vars.sh - 集群节点变量定义

# 颜色定义
RED='\033[1;31m'      # 红色标题
MAGENTA='\033[1;35m'  # 洋红色子步骤
YELLOW='\033[1;33m'   # 黄色提示
RESET='\033[0m'

# 日志文件配置
LOG_FILE="/var/log/k8s-install-$(date +%Y%m%d%H%M%S).log"
ERROR_HINTS_FILE="/var/log/k8s-error-hints.txt"

# Master节点信息
MASTER_IP="192.168.55.160"
MASTER_NAME="master01"

# Node节点信息
NODE_IPS=("192.168.55.161" "192.168.55.162")
NODE_NAMES=("node01" "node02")

# 初始化错误提示文件
init_error_hints() {
    if [ ! -f "$ERROR_HINTS_FILE" ]; then
        cat > "$ERROR_HINTS_FILE" <<EOF
# 常见错误及解决方法
1. 设置主机名失败: 请检查主机名是否合法，或是否有root权限。
2. 写入/etc/hosts失败: 确保有写入权限，或检查磁盘空间。
3. 关闭防火墙失败: 检查firewalld服务是否安装，或尝试手动停止。
4. 禁用Swap失败: 确保没有正在使用swap分区，检查/etc/fstab配置。
5. 内核参数配置失败: 检查sysctl配置文件的权限和内容。
6. Docker安装失败: 检查网络连接，或手动下载安装脚本。
7. cri-dockerd安装失败: 确认RPM包是否存在，或版本兼容性。
8. K8s组件安装失败: 检查yum源配置，或网络连接。
9. Master初始化失败: 检查网络配置，端口是否被占用，或镜像拉取问题。
10. Calico应用失败: 检查YAML文件是否正确，或网络策略冲突。
EOF
    fi
}

# 增强版错误处理函数
handle_error() {
    local cmd=$1
    local exit_code=$2
    local step=$3
    echo -e "${RED}>>> 错误发生在: $cmd${RESET}"
    echo "错误详情: exit code $exit_code" | tee -a $LOG_FILE
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 错误命令: $cmd, 错误码: $exit_code" >> "$ERROR_HINTS_FILE"
    
    # 分步骤恢复指引
    case $step in
        7)
            echo -e "${YELLOW}⚠️ 关键步骤中断！请按以下步骤恢复："
            echo -e "1. 检查网络连接"
            echo -e "2. 重新执行本脚本"
            echo -e "3. 若仍失败，请查阅日志: $LOG_FILE${RESET}"
            ;;
        12)
            echo -e "${YELLOW}⚠️ 集群已初始化，请手动执行以下命令修复："
            echo -e "wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml"
            echo -e "kubectl apply -f calico.yaml"
            echo -e "完成后使用命令检查状态: kubectl get pods -n kube-system${RESET}"
            ;;
        *)
            echo -e "${YELLOW}⚠️ 请查看错误提示文件以获取帮助: $ERROR_HINTS_FILE ${RESET}"
            ;;
    esac
    exit 1
}

init_error_hints